
package com.csz.model;

import com.csz.dao.Persistencia;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/* @author Arthur F. Zanona */

public class Biotipo extends Persistencia {
    private static final long serialVersionUID = 1L;
    
    private Integer bioIdade;
    private Integer bioPesId;
    private String bioSexo;
    private String bioAcompanhado;
    private Double bioDinheiro;
    

    public Biotipo() {
    }

    private Biotipo(Integer bioId, Integer bioIdade, Integer bioPesId, String bioSexo, String bioAcompanhado , Double bioDinheiro) {
        this.id = bioId;
        this.bioIdade = bioIdade;
        this.bioPesId = bioPesId;
        this.bioSexo = bioSexo;
        this.bioAcompanhado = bioAcompanhado;
        this.bioDinheiro = bioDinheiro;
    }

    public Integer getIdade() {
        return bioIdade;
    }

    public Integer getPessoaId() {
        return bioPesId;
    }

    public String getSexo() {
        return bioSexo;
    }

    public String getAcompanhado() {
        return bioAcompanhado;
    }

    public Double getDinheiro() {
        return bioDinheiro;
    }

    public void setAcompanhado(String bioAcompanhado) {
        this.bioAcompanhado = bioAcompanhado;
    }

    public void setDinheiro(Double bioDinheiro) {
        this.bioDinheiro = bioDinheiro;
    }

    public void setIdade(Integer bioIdade) {
        this.bioIdade = bioIdade;
    }

    public void setPesId(Integer bioPesId) {
        this.bioPesId = bioPesId;
    }

    public void setSexo(String bioSexo) {
        this.bioSexo = bioSexo;
    }

    public Integer salvar(Object obj) {
        return null;
    }

    @Override
    public void salvar() {
        String namedQuery = this.getId() == null ? Inserir : Atualizar ;
        // passagem de parametro
        List<Object> params = Arrays.asList(
                new Object[] {
                    this.bioIdade,
                    this.bioPesId,
                    this.bioSexo,
                    this.bioAcompanhado,
                    this.bioDinheiro,
                    // se for inserir, esse parametro é o retorno da SP,
                    // senao eh a clausa do where na atualizacao
                    this.getId() != null ? this.getId() : null
                }
         );
        // fim passagem de parametro

        // o retorno da sp é o id da entidade
        this.id = (Integer) callNamedStoredProcedure(namedQuery, params , Integer.class );
    }

    public static Object consultar(Integer id) {
        return Biotipo.consultarNamedQuery(ConsultarPorId, Arrays.asList(new Object[]{id}));
    }

    @Override
    public void remover() {
        PreparedStatement ps = createStatementNamedQuery(Remover, Arrays.asList( new Object[] { this.getId() } ));
        try {
            ps.execute();
        } catch (SQLException ex) {}
    }

    public static List<Object> consultar(){
        return Biotipo.consultarNamedQuery(ConsultarTodos, Arrays.asList(new Object[]{}));
    }

   public static List<Object> consultarNamedQuery(String namedQuery, List params){
        PreparedStatement ps = createStatementNamedQuery( namedQuery, params );
        List<Object> lista = new ArrayList<Object>();
        try {
            ResultSet rs = ps.executeQuery();
            while ( rs.next() ) {
                Biotipo b = new Biotipo(
                        rs.getInt("bio_id")  ,
                        rs.getInt("bio_idade_id") ,
                        rs.getInt("bio_pes_id") ,
                        rs.getString("bio_sexo") ,
                        rs.getString("bio_acompanhado"),
                        rs.getDouble("bio_dinheiro")
                );
                lista.add(b);
            }
        }
        catch (SQLException ex) {}
        return lista;
    }

        // QUERY SQL --------------------------------------------------------------------------------------------------------------
    private static final String ConsultarTodos = "SELECT bio_id, bio_idade , bio_pes_id , bio_sexo,  bio_acompanhado, bio_dinheiro FROM Biotipo b";
    private static final String ConsultarPorId = "SELECT bio_id, bio_idade , bio_pes_id , bio_sexo,  bio_acompanhado, bio_dinheiro  WHERE b.bioId = ?";
    private static final String Remover = "CALL apagar_biotipo (?)";
    private static final String Atualizar = "CALL atualizar_biotipo (?,?,?,?,?,?)";
    private static final String Inserir = "CALL inserir_biotipo (?,?,?,?,?,?)";
    // FIM QUERY SQL --------------------------------------------------------------------------------------------------------------


}
